<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;

class Base extends Controller
{

    public function __construct(){

        parent::__construct();

        // 判断当前是否登陆
        if(!session("?info")){
            $this->error("您还未登陆，请先登陆!","/admin/Login/index");
            die;
        }

        // 权限控制
        $this->checkAuth();

        // 检测权限
        $this->getNav();
    }

    // 权限控制器方法
    public function getNav()
    {
        // 获取当前的用户权限id
        $role_id = session('info.role_id');

        // 判断当前是否是admin用户登陆
        if($role_id == 0)
        {
            // 获取所有的一级分类
            $top_nav = \app\admin\model\Auth::where('pid',0)->select();

            // 获取所有的二级分类
            $down_nav = \app\admin\model\Auth::where("pid","<>",0)->select();
        }else{

            # 获取当前用户的角色方法
            $role = \app\admin\model\Rule::find($role_id);

            # 获取当前用户的所有控制器权限id
            $role_auth = $role['role_ids'];

            // 当前用户的所有一级分类
            $top_nav = \app\admin\model\Auth::where([
                'pid' => 0,
                'is_nav' => 1,
                'id' => ['in',$role_auth]
            ])->select();

            // 获取当前用户的所有的二级分类
            $down_nav = \app\admin\model\Auth::where([
                'pid' => ['>',0],
                'is_nav' => 1,
                'id' =>  ['in',$role_auth]
            ])->select();

        }

        // 传递参数
        $this->assign("top_nav",$top_nav);
        $this->assign("down_nav",$down_nav);
    }

    // 权限检查
    public function checkAuth()
    {
        # 获取当前角色id
        $role_id = session('info.role_id');

        // 判断当前是否是admin登陆
        if($role_id == 0) return;

        // 获取访问的控制和方法
        $controller = request()->controller();
        $action = request()->action();

        // 判断特殊的访问权限
        if($controller == 'Index' && $action == "index") return;
        if($controller == "Base" && $action == "logout") return;

        // 获取当前的拥有的所有权限id
        $rule =  \app\admin\model\Rule::find($role_id);
        // 需要转换成数组
        $rule_auth = explode(',',$rule['role_ids']);

        // 获取要访问的权限id
        $auth = \app\admin\model\Auth::where('auth_c',strtolower($controller))->where('auth_a',strtolower($action))->find();
        $auth_id = $auth['id'];

        // 判断要访问地址id，是否是自己所拥有的权限id;如果存在可以访问，否则就不可以访问。
        if(!in_array($auth_id,$rule_auth))
        {
            $this->error("非常抱歉，您没有权限访问",'admin/index/index');
            die;
        }
    }

    // 退出功能  删除session
    public function logout()
    {
        session("info",null);
        $this->success("退出成功。欢迎再次登陆","/admin/Login/index");
        die;
    }

}
